package it.gat.client.view;

import it.gat.controller.ContrattoController;
import it.gat.controller.utils.GatSession;
import it.gat.model.Contratto;
import it.gat.model.Cliente;

import java.awt.BorderLayout;
import java.awt.Container;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JInternalFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.table.DefaultTableModel;
import javax.swing.JOptionPane;
import javax.swing.JToolBar;
import javax.swing.ImageIcon;

public class ContrattiInternalFrame extends JInternalFrame {
	private JTable table;
	private Container container;
	private ContrattiInternalFrame thisFrame;
	/**
	 * Create the frame.
	 */
	public ContrattiInternalFrame(String title,final Container desktop) {
		super(title);
		this.setClosable(true);
		setBounds(0, 0, 800, 600);
		container = desktop;
		thisFrame = this;
		
		DefaultTableModel model = new DefaultTableModel(getDataTable(),getHeaderTable()){
		    @Override
		    public boolean isCellEditable(int row, int column) {
		       //all cells false
		       return false;
		    }
		};
	    
	    JToolBar toolBar = new JToolBar();
	    getContentPane().add(toolBar, BorderLayout.NORTH);
	    
	    JButton btnNuovo = new JButton("Nuovo");
	    btnNuovo.setIcon(new ImageIcon(ContrattiInternalFrame.class.getResource("/it/gat/client/img/Nuovo.png")));
	    btnNuovo.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				ContrattoInternalFrame contrattoInternalFrame = new ContrattoInternalFrame("Contratto",false,desktop,thisFrame);
				desktop.add(contrattoInternalFrame);
				contrattoInternalFrame.setVisible(true);
			}});
	    toolBar.add(btnNuovo);
	    
	    JButton btnModifica = new JButton("Modifica");
	    btnModifica.setIcon(new ImageIcon(ContrattiInternalFrame.class.getResource("/it/gat/client/img/Modifica.png")));
	    btnModifica.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				ContrattoInternalFrame contrattoInternalFrame = new ContrattoInternalFrame("Contratto",true,desktop,thisFrame);
				int codice = Integer.parseInt((String) table.getModel().getValueAt(table.getSelectedRow(), 0));
				ContrattoController ac = new ContrattoController();
				contrattoInternalFrame.setContratto(ac.getContratto(codice));
				desktop.add(contrattoInternalFrame);
				contrattoInternalFrame.setVisible(true);
			}});
	    toolBar.add(btnModifica);
	    
	    JButton btnElimina = new JButton("Elimina");
	    btnElimina.setIcon(new ImageIcon(ContrattiInternalFrame.class.getResource("/it/gat/client/img/Elimina.png")));
	    btnElimina.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				int n = JOptionPane.showConfirmDialog(
						desktop,
					    "Sei sicuro di eliminare l'elemento selezionato?",
					    "Conferma",
					    JOptionPane.YES_NO_OPTION,
					    JOptionPane.QUESTION_MESSAGE);
				if (n==JOptionPane.YES_OPTION)
				{
					ContrattoController ac = new ContrattoController();
					int codice = Integer.parseInt((String) table.getModel().getValueAt(table.getSelectedRow(), 0));
					ac.deleteContratto(codice);
					refresh();
				}
			}});
	    toolBar.add(btnElimina);
	    
	    if (GatSession.getInstance().getUtenteLoggato() instanceof Cliente)
		{
			btnNuovo.setVisible(false);
			btnModifica.setVisible(false);
			btnElimina.setVisible(false);
		}
	    
	    table = new JTable(model);
	    
	    if(table.getRowCount()>0)
	    	table.setRowSelectionInterval(0, 0);

	    JScrollPane scrollPane = new JScrollPane(table);
	    
	    getContentPane().add(scrollPane); 

	    setVisible(true); 

	}
	
	private String[] getHeaderTable()
	{
		String[] columnName = {"Codice","Cliente","Data inizio","Data fine","Ore previste","Ore usufruite","Ore rimanenti"};
		return columnName;
	}
	
	private String[][] getDataTable()
	{
		ContrattoController cc = new ContrattoController();
		List<Contratto> contratti;
		if (!(GatSession.getInstance().getUtenteLoggato() instanceof Cliente))
		{
			contratti = cc.getContrattoList();
		}
		else
		{
			contratti = cc.getContrattiCliente((Cliente)GatSession.getInstance().getUtenteLoggato());
		}
		List<String[]> data = new ArrayList<String[]>();
		SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
		for(Contratto contratto: contratti){
				String[] contrattoArray = {Integer.toString(contratto.getIdContratto()),
						                  contratto.getCliente().getRagioneSociale(),
						                  format.format(contratto.getDataInizio()),
						                  format.format(contratto.getDataFine()),
						                  Integer.toString(contratto.getOrePreviste()),
						                  Integer.toString(contratto.getOreUsufruite()),
						                  Integer.toString(contratto.getOrePreviste()-contratto.getOreUsufruite())};
				data.add(contrattoArray);
			}
		return data.toArray(new String[0][0]);
	}
	
	public void refresh()
	{
		DefaultTableModel model = new DefaultTableModel(getDataTable(),getHeaderTable()){
		    @Override
		    public boolean isCellEditable(int row, int column) {
		       //all cells false
		       return false;
		    }
		};
		table.setModel(model);
	}
}
